"""对话记录数据库操作：封装增删改查，与业务逻辑解耦"""
from typing import List, Dict, Optional
from datetime import datetime
import uuid
from db.client import chat_collection
from config.constants import ROLE_USER, ROLE_ASSISTANT

def save_chat_record(
    session_id: str,
    user_id: str,
    role: str,
    content: str
) -> Dict:
    """
    保存单条对话记录
    :param session_id: 会话ID
    :param user_id: 用户ID
    :param role: 角色（user/assistant）
    :param content: 消息内容
    :return: 保存后的记录（含message_id）
    """
    record = {
        "message_id": str(uuid.uuid4()),  # 生成唯一消息ID
        "session_id": session_id,
        "user_id": user_id,
        "role": role,
        "content": content,
        "created_at": datetime.now()
    }
    chat_collection.insert_one(record)
    return record

def get_chat_history(
    session_id: str,
    user_id: str,
    limit: Optional[int] = None
) -> List[Dict]:
    """
    获取某个会话的历史记录
    :param session_id: 会话ID
    :param user_id: 用户ID（数据隔离，确保只能获取自己的记录）
    :param limit: 最大条数（None表示全部）
    :return: 按时间排序的历史记录列表
    """
    query = {
        "session_id": session_id,
        "user_id": user_id
    }
    # 按创建时间升序排序（最早的在前）
    cursor = chat_collection.find(query).sort("created_at", 1)
    if limit:
        cursor = cursor.limit(limit)
    # 转换为列表返回
    return list(cursor)

def get_chat_count(session_id: str, user_id: str) -> int:
    """获取某个会话的消息总数"""
    query = {
        "session_id": session_id,
        "user_id": user_id
    }
    return chat_collection.count_documents(query)